/********************************************************************************
 * Project Name		[JavaSE_Fundamentals]
 * File Name     	[TestEnumSet.java]
 * Creation Date 	[2015-01-01]
 * 
 * Copyright© ge.y.yang@gmail.com All Rights Reserved
 * 
 * Work hard, play harder, think big and keep fit
 ********************************************************************************/
package jdk5.enums;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.EnumSet;
import java.util.Iterator;
import java.util.List;

/**
 * @author 不落的太阳(Sean Yang aka ShortPeace)
 * @version 1.0
 * @since jdk 1.8
 * 
 */
public class TestEnumSet {

	/**
	 * 遍历显示枚举集合中的每一个元素
	 * 
	 * @param Size
	 */
	public static void showEnumSet(String enumDesc, EnumSet<Size> sizes) {
		System.out.print(enumDesc + ": ");
		Iterator<Size> iter = sizes.iterator();
		while (iter.hasNext()) {
			System.out.print(iter.next() + "\t");
		}
		System.out.println();
	}

	public static void main(String[] args) {
		// of()方法用于创建EnumSet
		EnumSet<Size> enumSet1 = EnumSet.of(Size.SMALL, Size.MEDIUM);
		TestEnumSet.showEnumSet("enumSet1", enumSet1);

		// complementOf()方法创建一个元素类型和指定EnumSet相同的的枚举集
		// 新的枚举集不包含原有集合内的元素, 即包含原有枚举中的剩余元素
		EnumSet<Size> enumSet2 = EnumSet.complementOf(enumSet1);
		TestEnumSet.showEnumSet("enumSet2", enumSet2);

		// noneOf()方法创建一个具有指定元素类型的空枚举集
		EnumSet<Size> enumSet3 = EnumSet.noneOf(Size.class);
		enumSet3.add(Size.LARGE);
		enumSet3.add(Size.EXTRA_LARGE);
		TestEnumSet.showEnumSet("enumSet3", enumSet3);

		// allOf()方法创建一个包含指定元素类型的所有元素的枚举集
		EnumSet<Size> enumSet4 = EnumSet.allOf(Size.class);
		TestEnumSet.showEnumSet("enumSet4", enumSet4);
		Object[] enumStr = new Object[enumSet4.size()];
		enumSet4.toArray(enumStr);
		System.out.println(Arrays.toString(enumStr));

		// range()方法创建一个指定元素起始位置的枚举集
		EnumSet<Size> enumSet5 = EnumSet.range(Size.SMALL, Size.LARGE);
		TestEnumSet.showEnumSet("enumSet5", enumSet5);

		List<Size> fonts = new ArrayList<Size>();
		fonts.add(Size.SMALL);
		fonts.add(Size.MEDIUM);
		fonts.add(Size.LARGE);
		fonts.add(Size.EXTRA_LARGE);
		// copyOf()方法从一个指定的集合初始化枚举集
		EnumSet<Size> enumSet6 = EnumSet.copyOf(fonts);
		TestEnumSet.showEnumSet("enumSet6", enumSet6);
	}
}
